function numSubarraysWithSum(nums: number[], goal: number): number {
    let pos:number[] = nums.map( (e,i) => e ? i:-1).filter( e => e>=0);
    pos.push(nums.length);
    let l=-1;
    let zeros: number[] = [];
    pos.forEach(e => {
        zeros.push(e-l-1);
        l=e;
    })
    function calc(e: number): number{
        let ret=0;
        while(e>0){
            ret+=e;
            e--;
        }
        return ret;
    }
    if(goal === 0){
        return zeros.map(e => e ? calc(e) : 0).reduce((a,b) => a+b);
    }
    l=0;
    let r=goal;
    let ret=0;
    while(r<zeros.length){
        ret+=(zeros[l]+1)*(zeros[r]+1);
        l++;
        r++;
    }
    return ret;
};

// 执行用时：
// 108 ms
// , 在所有 TypeScript 提交中击败了
// 40.00%
// 的用户
// 内存消耗：
// 46.5 MB
// , 在所有 TypeScript 提交中击败了
// 20.00%
// 的用户